package com.example.tobebigfe.web

import android.content.Context
import android.content.SharedPreferences
import android.util.Log
import androidx.preference.PreferenceManager
import com.example.tobebigfe.BuildConfig
import okio.buffer
import okio.source
import org.json.JSONObject
import java.io.IOException
import java.io.InputStream

/*

管理项目化之后的逻辑:
1. manifest.json
2. 正式的url的拼接

 */

object WebManager {

    // 项目名 => 版本
    private val versionMap = mutableMapOf<String, String>()

    private lateinit var preferences: SharedPreferences

    // 初始化
    fun init(context: Context) {

        preferences = PreferenceManager.getDefaultSharedPreferences(context)

        // 1. 从assets中获取manifest.json的InputStream
        val input = context.assets.open("manifest.json")
        // 2. 读取完整内容
        val manifestStr = readAll(input)
        // 3. 从json一步步解析到versionMap
        val manifest = JSONObject(manifestStr)
        val projects = manifest.getJSONArray("projects")
        for (i in 0 until projects.length()) {
            val prj = projects.getJSONObject(i)
            versionMap[prj.getString("name")] = prj.getString("version")
        }
    }

    // 根据id和page获取正式的url
    fun getWebUrl(id: String, page: String): String {
        if (BuildConfig.DEBUG && preferences.isWebDevEnabled() && id == preferences.webDevProject()) {
            return "http://${preferences.webDevServer()}/$id/dev/$page?t=" + System.currentTimeMillis()
        }
        return "${WebConst.WEB_BASE_URL}$id/${versionMap[id]}/$page"
    }

    // 工具函数，读取一个InputStream的所有内容，这里使用到了okio库，非常方便
    @Throws(IOException::class)
    private fun readAll(input: InputStream): String {
        return input.source().use { fileSource ->
            fileSource.buffer().use { buffer ->
                buffer.readUtf8()
            }
        }
    }

}

private fun SharedPreferences.isWebDevEnabled(): Boolean {
    return getBoolean("webDev.enabled", false)
}

private fun SharedPreferences.webDevProject(): String? {
    return getString("webDev.project", null)
}

private fun SharedPreferences.webDevServer(): String? {
    return getString("webDev.server", null)
}